1. Technical Field
The invention is related to audio input signal gain control, and in particular, to a system and method for providing an automatic system level gain control for allowing an audio signal, such as a microphone signal, “line in” audio signal, CD audio signal, etc., to be simultaneously provided to multiple separate audio capture or processing applications while providing a centralized gain control for each audio input source.
2. Related Art
Conventional analog microphones, including individual microphones and microphone array type devices, are well known to those skilled in the art. When connected to a computing device, such as a personal computer (PC) or the like, such microphones are frequently used in applications including, for example, voice over IP (VoIP) clients or speech recognition engines, which receive an audio signal captured by the microphone, and then process that signal in accordance with the application parameters.
Unfortunately, typical computing systems originally allowed only one application to capture data from a hardware device's microphone at any one time. In the event that a second application attempted to capture data from the same microphone simultaneously with a first application, the second application would typically be denied access to the microphone signal being accessed by the first application. As a result, applications requiring real-time feed from a microphone were not typically capable of simultaneous operation.
Therefore, in an attempt to address this problem, one conventional scheme was implemented to provide a method whereby the audio input of a microphone could be simultaneously provided to multiple applications. For example, in current versions of the Microsoft® Windows® operating system, beginning with the “Millennium Edition” version of Windows®, a system level driver having a filename of “splitter.sys” was provided to create two or more identical output streams from a single input capture stream. In general, the “splitter.sys” driver transparently copies the input stream to two more output streams independently of the format of the input stream, and then provides copies of that stream to whatever application requests a copy.
Unfortunately, while the new audio signal splitting feature provided by splitter.sys addressed the problem of being unable to simultaneously provide an audio input to two or more concurrent applications, it created a potential new problem for a number of applications that capture data from a microphone. In particular, many audio capture applications often attempt to optimize the signal-to-noise ratio (SNR) of the microphone signal by continuously controlling the analog gain of the preamp(s) associated with the microphone's analog to digital converters (A/Ds). Consequently, if multiple capture applications are capturing data from a microphone, any two or more of those applications may be simultaneously attempting to control the microphone's analog gain, thereby likely degrading the microphone's signal.
For example, applications such as VoIP clients or speech recognition engines often try to control the analog microphone gain in order to maximize the SNR ratio without introducing clipping. In this case, multiple closed loop gain control systems will be trying to adjust the single analog microphone gain in isolation. This scenario often leads to oscillations of the microphone gain, which in the worst case, forces the analog microphone gain to either the minimum value or maximum value supported by the microphone's preamp because of the inherent instability of competing gain control systems. If the gain is forced to the minimum value, the microphone will only record silence or a signal that is too quiet. Conversely, if the gain is forced to the maximum value, near end speech may be seriously distorted due to a significant amount of clipping.
Therefore, what is needed is a system and method for providing simultaneous access of an incoming microphone signal, while maintaining gain control over the microphone. Further, such a system and method should also be capable of operation with applications designed separately to control the microphone gain by intercepting the gain control commands from such applications, and preventing those applications from affecting the microphone gain.